INTDOSX

              
               #include <dos.h>
               int intdosx(intno,inregs,outregs,segregs);
               union REGS *inregs;           значение  регистров  при вызове
               union REGS *outregs;          значение  регистров  при возврате
               struct SREGS *segregs;        значение  сегментов  при вызове

Описание.
Функция intdosx осуществляет выполнение системного вызова DOS , который определен значением регистра, объявленным в inregs , и возвращает результат системного вызова в outregs . В отличии от функции intdos , функция intdosx принимает значения регистров сегмента в segregs , позволяя программам, которые используют сегменты данных большой модели или far -указатели, определить, какой сегмент или указатель должен быть использован на протяжении системного вызова. Аргументы inregs и outregs являются объединениями типа REGS . Аргумент segregs является структурой типа SREGS . Эти типы объявлены в include -файле <dos.h> . Для активизации системного вызова функция intdosx выполняет команду INT 21H . Перед выполнением команды функция копирует содержимое inregs и segregs в соответствующие регистры. В segregs используются только значения регистров DS и ES . После возврата команды INT intdosx копирует текущее значение регистра в outregs и перезаписывает DS.
Она также копирует статус переносимого флага системы в поле cflag , размещенное в outregs . Если это поле является ненулевым, флаг устанавливается посредством системного вызова и указывает на условие ошибки.
Область действия функции intdosx расширяется и на область действия системных вызовов DOS , которые берут аргумент в регистре ES или значение регистра DS , отличное от умалчиваемого сегмента данных.

Возвращаемое значение.
После завершения системного вызова функция intdosx возвращает значение регистра AX . Если поле cflag в outregs является ненулевым, возникает ошибка и _doserrno также устанавливает соответствующий код ошибки.

Замечание!
Значения сегмента для аргумента segreg могут быть получены либо при использовании функции segread , либо макро FP_SEG.

Пример:

               #include <dos.h>
               union REGS inregs, outregs;
               struct SREGS segregs;
               char far *dir = "/test/bin";
               /*следующий  оператор  заменяет  текущий рабочий директорий
         вызовом шеснадцатеричной функции DOS 36 */
                inregs.h.ah=0x3b;
                /* измененный директорий */
                inregs.x.dx=FP_OFF(dir);
                /* имя файла offset*/
                segregs.ds=FP_SEG(dir);
                /* имя файла сегмента */
                intdosx(&inregs,&outregs,&segregs);
Hosted by uCoz